//package com.ndbg.demo.utils;
//
//import org.apache.pdfbox.pdmodel.PDDocument;
//import org.apache.pdfbox.rendering.PDFRenderer;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import javax.imageio.ImageIO;
//import java.awt.image.BufferedImage;
//import java.io.ByteArrayInputStream;
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//
///**
// * PDF 工具
// *
// * @author 陈晓斌
// */
//public class PdfUtils {
//
//    private static final Logger LOGGER = LoggerFactory.getLogger(PdfUtils.class);
//
//    private static final String PNG_FORMAT = "png";
//
//    private static final byte[] PDF_SUFFIX = {0x25, 0x50, 0x44, 0x46};
//
//    private PdfUtils() {
//    }
//
//    /**
//     * 将 PDF 文件对应页转换为 PNG
//     * 注：若目标页小于 1 则返回最后一页，若目标页大于总页数则返回最后一页。
//     *
//     * @param pdf  PDF 文件
//     * @param page 目标页码
//     * @return PDF 对页 PNG 文件字节流
//     */
//    public static byte[] getPagePng(byte[] pdf, int page) {
//        byte[] png = null;
//        try (InputStream inputStream = new ByteArrayInputStream(pdf);
//             PDDocument pdfDocument = PDDocument.load(inputStream);
//             ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
//
//            // 当前页码应大于 1 且小于总页数
//            page = Math.min(Math.max(page, 1), pdfDocument.getNumberOfPages());
//
//            PDFRenderer pdfRenderer = new PDFRenderer(pdfDocument);
//            BufferedImage image = pdfRenderer.renderImage(page - 1, 2.0f);
//            if (image != null) {
//                image.flush();
//                ImageIO.write(image, PNG_FORMAT, ImageIO.createImageOutputStream(byteArrayOutputStream));
//                png = byteArrayOutputStream.toByteArray();
//                // 调整异常数据
//                for (int i = 0; i < png.length; ++i) {
//                    if (png[i] < 0) {
//                        png[i] += 256;
//                    }
//                }
//            }
//        } catch (IOException e) {
//            LOGGER.error("PDF解析异常：", e);
//        }
//        return png;
//    }
//
//    /**
//     * 获取 PDF 文件页数
//     *
//     * @param pdf PDF 文件
//     * @return PDF 文件页数
//     */
//    public static int countPage(byte[] pdf) {
//        try (InputStream inputStream = new ByteArrayInputStream(pdf);
//             PDDocument pdfDocument = PDDocument.load(inputStream)) {
//            return pdfDocument.getNumberOfPages();
//        } catch (IOException e) {
//            LOGGER.error("PDF解析异常：", e);
//        }
//        return 0;
//    }
//
//    /**
//     * 判断文件是否为 PDF
//     * @param file 文件的字节流
//     * @return 是返回 true
//     */
//    public static boolean isPdf(byte[] file) {
//        for (int i = 0; i < PDF_SUFFIX.length; i++) {
//            if (file[i] != PDF_SUFFIX[i]) {
//                return false;
//            }
//        }
//        return true;
//    }
//}
